home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / asmutil / tbones07.zip / TSRBONES.ASM < prev    next >
Assembly Source File  |  1991-01-20  |  38KB  |  794 lines

  1. ;************************
  2. PAGE 55,132             ;Format .LST listing at 55 lines by 132 columns.
  3. TITLE TSRBONES Version 0.1 Jan 20 91 Robert Curtis Davis
  4. SUBTTL Introduction
  5. ;**************************************************************************
  6. ;
  7. ;       TSRBONES.ASM     Version 0.1     Jan 20 91
  8. ;       A part of the TBONES software package.
  9. ;
  10. ;       Copyright (C) 1990, 1991 by Robert Curtis Davis,
  11. ;    All Rights Reserved.
  12. ;
  13. ;    DESCRIPTION:
  14. ;    ASM Program template for Terminate-and-Stay-Resident (TSR) programs
  15. ;        that are activated by a specified HotKey WHEN DOS IS NOT
  16. ;               BUSY (the InDOS Flag AND the DOS Critical Error Flag are zero)
  17. ;               flag), OR WHEN DOS IS AT "BUSY IDLE" (when INT28h is called),
  18. ;               AND WHEN NO HARDWARE INTERRUPT IRQ0-IRQ7 IS BEING HANDLED.
  19. ;               This avoids problems of interfering with hardware interrupt
  20. ;               handling and with DOS non-reentrancy; and allows DOS function
  21. ;               calls above 0Ch to be used in the TSR routine. The TSR's code
  22. ;               prevents multiple installations. Also checks DOS version and
  23. ;               requires DOS Version 2 or later before installation is
  24. ;               permitted.
  25. ;
  26. ;    PURPOSE:
  27. ;    Provides a skeletal framework program as a starting point in the 
  28. ;       design of your own HotKey TSRs which use DOS function calls, and
  29. ;       for which a single installation is desired.
  30. ;
  31. ;                   E-mail address:
  32. ;              Internet: sonny@trantor.harris-atd.com
  33. ;
  34. ;                  US Mail address:
  35. ;                                   430 Bahama Drive
  36. ;                                   Indialantic, FL 32903
  37. ;
  38. ;**************************************************************************
  39. ;
  40. ; Special thanks to Roy Silvernail, whose persistent hacking (in the best
  41. ; sense of that word) and E-mail exchanges over the holiday season in
  42. ; December 1990, rooted out TBONES incompatibilities with Borland's TASM v.1.0.
  43. ;
  44. ;**************************************************************************
  45. ;
  46. ; Special thanks to Anto Prijosoesilo and Richard Brittain for E-mail
  47. ; exchanges which helped solve detailed problems with the implementation of
  48. ; the "Pseudo-Environment" idea.
  49. ;
  50. ;**************************************************************************
  51. ;
  52. ; Special thanks to David Kirschbaum, whose Toad Hall Tweaks significantly
  53. ; improved an early version of the TBONES Assembly Language code:
  54. ;
  55. ;v0.01    Toad Hall Tweak, 25 Nov 90
  56. ;**************************************************************************
  57. SUBTTL Code Segment
  58. PAGE
  59. ;**************************************************************************
  60. ;
  61. CodeSeg        segment
  62.         assume cs:CodeSeg,ds:CodeSeg
  63. BeginDump    EQU    $        ;Roy Silvernail - Keep TASM 1.0 happy
  64.                     ;when computing # resident paragraphs.
  65. ;
  66.         org    2CH        ;v0.01 ORG in PSP to pick up the
  67. envseg        label    word        ;v0.01 Environment Segment.
  68. ;
  69.         org    100h        ;ORG for all COM programs.
  70. ;
  71. Entry        PROC    NEAR        ;v0.01
  72.         jmp    TSRinit        ;Jump over resident portion and
  73.                     ;initialize things and make code
  74.                     ;between Entry: and TSRinit: resident.
  75. ;
  76. ; Old Interrupt Vectors are stored here during TSR initialization:
  77. oldint09        dd      ?               ;Keyboard Hardware Interrupt.
  78. oldint13        dd      ?               ;Disk BIOS Interrupt.
  79. oldint16        dd      ?               ;Keyboard BIOS Interrupt.
  80. oldint28        dd      ?               ;DOS Idle Interrupt.
  81. ;
  82. ; For this HotKey TSR Template, specify Keyboard Interrupt 09h as the Hook:
  83. HOOK09        equ    09h            ;Hooked Interrupt 09h.
  84. ; Int 13h is used to set a flag to prevent TSR trigger while disk active:
  85. HOOK13          equ     13h                     ;Hooked Interrupt 13h.
  86. ; Int 16h is hooked solely to provide way to check for prior TSR installation.
  87. HOOK16        equ    16h            ;Hooked Interrupt 16h.
  88. ; We also have to hook Interrupt 28h to check for "DOS idle":
  89. HOOK28        equ    28h            ;Hooked Interrupt 28h.
  90. ;
  91. bellgate    db    0    ;Gate closed (=1) when in Bell routine.
  92.                 ;Gate open (=0) when not in Bell routine.
  93. ; Below:
  94. ; EQUates related to the Intel 8259A Programmable Interrupt Controller (PIC)
  95. ;    chip. Hardware Interrupts IRQ0 through IRQ7 are controlled by the PIC.
  96. ;
  97. ;    To really understand the nitty-gritty details of this stuff, 
  98. ;    you have to study the Intel Specification data for the 8259A PIC chip.
  99. ;    These EQUates are used in this TSR to examine the PIC chip's In Service
  100. ;    Register (ISR) to be sure that the TSR is not interrupting one of
  101. ;    the hardware interrupt service routines. The reason for not wanting to 
  102. ;    interrupt these hardware interrupt service routines is that they are
  103. ;    often time-critical and can be compromised by intruding on them with
  104. ;    our TSR (for example, a hardware COM port interrupt-driven comm 
  105. ;    program might lose bytes on a modem transfer if we bull our way in and
  106. ;    steal the CPU away from the comm program's service routine):
  107. PICPORT        EQU    20h        ;I/O Port for the 8259A PIC chip.
  108. ISRREQ        EQU    00001011B    ;This is a byte defining the
  109.                     ;Operation Control Word 3 (OCW3) to
  110.                     ;output on port 20h to make the PIC
  111.                     ;chip's In Service Register available 
  112.                     ;for reading by the CPU on the
  113.                     ;next IN 20h command.
  114. ;
  115. ; EQUs defining Key Flag weights in the Key Flag Byte:
  116. RSHIFT        equ    00000001B        ;Right Shift Key Flag weight.
  117. LSHIFT        equ    00000010B        ;Left Shift  Key Flag weight.
  118. CTRL        equ    00000100B        ;Ctrl        Key Flag weight.
  119. ALT        equ    00001000B        ;Alt         Key Flag weight.
  120. ;SCROLL          equ     00010000B               ;Scroll Lock Key Flag weight.
  121. ;NUM             equ     00100000B               ;Num Lock    Key Flag weight.
  122. ;CAPS            equ     01000000B               ;Caps Lock   Key Flag weight.
  123. INSRT        equ    10000000B        ;Ins         Key Flag weight.
  124. ;
  125. LockKeyMask     equ     10001111B               ;For masking out Scroll, Caps,
  126.                                                 ;and Num Lock bits in KeyFlags.
  127. ;
  128. ; Pointer to "DOS busy" (InDOS) flag (loaded during TSR initialization):
  129. indosptr    dd    ?
  130. ;
  131. ; Pointer to "Critical Error" (CritErr) flag (loaded at TSR initialization):
  132. criterrptr    dd    ?
  133. ;
  134. ; Pointer to "Print Screen" busy (PrtScrn) flag
  135. prtscrn         dd      00500000h
  136. ;
  137. ; hotkeyflag used to signal HotKey pressed to "DOS idle" Interrupt 28h:
  138. hotkeyflag      db      0       ;hotkeyflag initially zero.
  139. ;
  140. ; diskflag used to prevent TSR trigger during time-critical Disk operations:
  141. diskflag        db      0       ;diskflag initially zero.
  142. ;*************************************************************************
  143. ;    Your HotKey is specified here:
  144. ;       (This sample HotKey is set for Ctrl-Alt-B)
  145. ;
  146. ; Specify TSR's HotKey Shift Keys:
  147. KEYFLAGBYTE     equ     CTRL+ALT                ;HotKey Flags
  148. ;
  149. ; Specify TSR's HotKey Scan Code:
  150. HOTKEY          equ     30h                     ;'B' (for Bones) key
  151. ;
  152. ;*************************************************************************
  153. ; Specify TSR's signature words:
  154. TSRsigA         equ     'TS'            ;'TSRBONES' Signature
  155. TSRsigB         equ     'RB'
  156. TSRsigC         equ     'ON'
  157. TSRsigD         equ     'ES'
  158. ;*************************************************************************
  159. Entry    ENDP        ;v0.01
  160. ;
  161. ;*************************************************************************
  162. SUBTTL User-supplied TSR Routine
  163. PAGE
  164. ;*************************************************************************
  165. ROUTINE         PROC    NEAR
  166. ;*************************************************************************
  167. ;    Code for your HotKey-triggered TSR routine  GOES HERE:
  168. ;    ( Here, a dummy routine has been placed which simply rings the
  169. ;      terminal Bell whenever the TSR is triggered. )
  170. ;
  171. ;    Announce this dummy TSR's trigger by a Bell signal:
  172. ;
  173. Enter:
  174.                 mov     al,07h          ;al = ASCII Bell.
  175.                 mov     bh,0            ;Video page.
  176.                 mov     cx,1            ;No. of bytes to write.
  177.                 mov     ah,0Eh          ;BIOS Int10,OEh=TTY Screen.
  178.                 Int     10h             ;Write ASCII Bell to screen.
  179. ;
  180. Exit:
  181.                 ret